package demo.day11

// Kotlin 语言的reified 关键字
fun main() {
    KtBaseDay11_06().randomDefault<ObjectClass1> {
       val p =  ObjectClass1("Kiki", 18, 'm')
        println("生成备用对象$p")
        p
    }

}

data class ObjectClass1(val name: String, val age: Int, val sex: Char)
data class ObjectClass2(val name: String, val age: Int, val sex: Char)
data class ObjectClass3(val name: String, val age: Int, val sex: Char)

class KtBaseDay11_06() {
    // 所有的功能 写在函数上
    // 默认随机产生一个对象 如果此对象和用户指定的对象不一致
    // 我们就启用备用对象 否则就直接返回对象
    inline fun <reified T> randomDefault(defaultLambdaAction:() ->T?): T? {
        val objList = listOf(
            ObjectClass1("Kiki", 18, 'm'),
            ObjectClass2("QiQi", 17, 'w'),
            ObjectClass3("Jiji", 19, 'm')
        )
        val randomObj = objList.shuffled().last()
        println("您随机产生的对象是$randomObj")
        return randomObj.takeIf { it is T } as T? // 当 it is T  不匹配的时候会变成false 这是会返回null null as T会报错
        // asT? 不会报错
        // 如果it随机产生的对象不等于T  返回一个默认对象
            ?:defaultLambdaAction()
    }

}